package connection

import (
	"encoding/hex"
	mqtt "github.com/eclipse/paho.mqtt.golang"
	"github.com/go-kratos/kratos/v2/log"
	"github.com/go-netty/go-netty"
	"time"
)

// DeviceChannel 设备与服务端连接通道
type DeviceChannel struct {
	DeviceCode   string      // 设备码
	Channel      interface{} // 连接通道
	LastCommTime time.Time   // 最后通信时间
}

func (c *DeviceChannel) WriteToMqtt(topic string, content interface{}) {
	client, ok := c.Channel.(mqtt.Client)
	if ok {
		if token := client.Publish(topic, 1, false, content); token.Wait() && token.Error() != nil {
			log.Errorf("[%s] send to device data error, topic: [%s], content: [%s], error: [%s]", c.DeviceCode, topic, content, token.Error())
		}
	}
}

func (c *DeviceChannel) WriteToSocket(content []byte) {
	channel, ok := c.Channel.(netty.Channel)
	if ok {
		if ok = channel.Write(content); !ok {
			log.Errorf("[%s] send to device data error, content: [%s]", c.DeviceCode, hex.EncodeToString(content))
		}
	}
}
